# <!--
#   Git 自动初始化脚本
#   使用方式：
#   1. 在脚本执行时，输入提交备注和远程仓库地址
#   2. 脚本会初始化本地 Git 仓库，并将当前目录下的文件推送到远程仓库
#   3. 如果 .gitignore 文件不存在，脚本会创建并忽略当前脚本文件（init.py）
#   4. 如果命令执行失败，.git 文件夹会被删除
#   author: dongbucheng
#   date: 2024-12-24
# -->

import os
import subprocess
import shutil

print('欢迎使用Git自动初始化脚本')

commitText = input('请填写备注：')
storeHouseUrl = input('请输入要绑定的仓库地址：')

# 获取当前脚本的文件名
script_filename = os.path.basename(__file__)

# 创建 Git 仓库并初始化
def create_git_init():
    folder_path = os.getcwd()  # 当前工作目录
    gitignore_path = os.path.join(folder_path, ".gitignore")

    # 如果 .gitignore 不存在，则创建并忽略当前脚本文件；如果已存在，则在末尾添加
    if not os.path.exists(gitignore_path):
        with open(gitignore_path, "w") as f:
            f.write(f"{script_filename}\n")  # 使用当前脚本文件名
    else:
        with open(gitignore_path, "a") as f:  # 如果文件已存在，追加内容
            # 检查是否已经包含当前脚本文件名，避免重复添加
            with open(gitignore_path, "r") as check_file:
                if f"{script_filename}\n" not in check_file.read():
                    f.write(f"{script_filename}\n")  # 如果没有，则添加


    # Git 命令列表
    command_arr = [
        'git init',  # 初始化 Git 仓库
        'git add .',  # 添加目录到缓存区
        f'git commit -m "{commitText}"',  # 提交更改
        f'git remote add origin {storeHouseUrl}',  # 添加远程仓库链接
        'git push -u origin "master"'  # 推送到远程仓库
    ]

    # 执行命令
    for command in command_arr:
        try:
            result = subprocess.run(
                command,
                shell=True,        # 允许使用 shell 命令
                check=True,        # 失败时抛出异常
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                universal_newlines=True  # 处理为文本格式
            )
            print(result.stdout)  # 输出标准输出
        except subprocess.CalledProcessError as e:
            print(f"命令执行失败: {e.stderr}")
            if os.path.exists(os.path.join(folder_path, ".git")):
              shutil.rmtree(os.path.join(folder_path, ".git"))
              print(".git 文件夹已删除")
            exit(1)

if __name__ == "__main__":
    create_git_init()
